<!DOCTYPE html>
<html lang="zh-CN">

<head>
	<meta charset="UTF-8">
	<meta name="author" content="wangbo">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>

<body>
	<script>
		// ES5引入了 Object.keys 方法，返回一个数组，成员是参数对象自身的（不含继承的）所有可遍历（enumerable）属性的键名。
		var obj = { foo: "bar", baz: 42 };
		Object.keys(obj)
		// ["foo", "baz"]
		let { keys, values, entries } = Object;
		let obj = { a: 1, b: 2, c: 3 };
		for (let key of keys(obj)) {
			console.log(key); // 'a', 'b', 'c'
		}
		for (let value of values(obj)) {
			console.log(value); // 1, 2, 3
		}
		for (let [key, value] of entries(obj)) {
			console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3]
		}
		let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
		// z // { a: 3, b: 4 }
		// 由于Rest解构赋值要求等号右边是一个对象，所以如果等号右边是 undefined 或 null ，就会报错，因为它们无法转为对象。
		let { x, y, ...z } = null; // 运行时错误
		let { x, y, ...z } = undefined; // 运行时错误

		// Rest解构赋值必须是最后一个参数，否则会报错。
		let { ...x, y, z } = obj; // 句法错误
		let { x, ...y, ...z } = obj; // 句法错误
	</script>
</body>

</html>